#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QLCDNumber>   //显示数字
#include "grid.h"       //格子（按钮）
#include <QTimer>
#include <QLabel>
#include <dlog.h>           //对话框（自定义时弹出）

#define level1_row 9    //初级难度 行列数 雷数
#define level1_col 9
#define level1_mine 10
#define level2_row 16   //中级难度 行列数 雷数
#define level2_col 16
#define level2_mine 40
#define level3_row 16   //高级难度 行列数 雷数
#define level3_col 30
#define level3_mine 99
#define rowMax 20       //自定义支持最大宽高
#define colMax 40
//空白区域大小
#define left_right_dis 70
#define top_bottom_dis 70

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    //屏幕宽高
    int sceneWidth = 0;
    int sceneHeigth = 0;

    //页面宽 高
    int main_wide = 0;
    int main_height = 0;

    //初始化 雷区 函数
    //传入雷区的 行数 和 列数
    void startMine(int, int);

    //笑脸按钮
    QPushButton * btn_restart = nullptr;
    //LCD显示  雷数  时间
    QLCDNumber * lcdNum = nullptr;
    QLCDNumber * lcdTime = nullptr;

    //记录当前难度的 行数 列数
    int currentRow = level1_row;
    int currentCol = level1_col;

    //雷 指针数组
    Grid * gridArray[rowMax][colMax];
    //清空
    void del_array();

    //是否为第一次点击
    bool isFirstClicked = false;
    //雷的数量
    int mineTotal = 0;
    //生成雷（参数为第一个点击格子的地址 生成雷时排除这个格子）
    void buildMine(Grid *);

    //游戏结束 点到雷（参数为点击的位置 显示为红色雷）
    void gameOver(Grid * grid = nullptr);

    //翻开格子
    void turnGrid(Grid *);

    //旗子数量
    int flagNum = 0;
    //时间计时
    int timeNum = 0;
    //开始计时
    bool isStartTimer = false;

    //游戏结束 循环显示放了旗子有雷的格子
    bool disMineFlag = false;

    //定时器
    QTimer * timer1 = nullptr;
    QTimer * timer2 = nullptr;

    //判断是否胜利
    void isWin();

    //放置一个label当游戏结束或者胜利时阻挡继续点击
    QLabel * label = nullptr;

    //是否胜利
    bool isWiner = false;

    //自定义 按钮新建页面
    Dlog * dlog = nullptr;

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
